home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ARASAN_S.ZIP / OPTIONS.CPP < prev    next >
C/C++ Source or Header  |  1994-08-12  |  5KB  |  171 lines

  1. // Copyright 1994 by Jon Dart.  All Rights Reserved.
  2.  
  3. #include "options.h"
  4. #include <stdlib.h> // for atoi
  5.  
  6. static const char ini_file[] = "arasan.ini";
  7.  
  8. static const char *keys[] = 
  9.   { "Primary Time Control", "Secondary Time Control" };
  10.  
  11. static const char *src_names[] =
  12.   { "Ply", "Time", "Game", "Tournament", "None", 0 };
  13.  
  14. #ifdef WINDOWS
  15. void Options::get_src_opts( const Control c,
  16.    Search_Type &my_search_type, Search_Limit &my_search_limit)
  17. {
  18.    char opt_str[80];
  19.    GetPrivateProfileString(keys[c],"Search Type",
  20.         (c == First) ? "Ply" : "None",
  21.        (LPSTR)opt_str,80,ini_file);
  22.    const char **p = src_names;
  23.    int type = 0;
  24.    while (*p)
  25.    {
  26.       if (strcmp(opt_str,*p)==0)
  27.          break;
  28.       ++type; ++p;
  29.    }
  30.    assert(type < 5);
  31.    my_search_type = (Search_Type)type;
  32.    switch (type)
  33.    {
  34.    case 0:
  35.       GetPrivateProfileString(keys[c],"ply","2",
  36.        (LPSTR)opt_str,80,ini_file);
  37.       my_search_limit.max_ply = atoi(opt_str);            
  38.       break;
  39.    case 1:      
  40.       GetPrivateProfileString(keys[c],"Seconds","60",
  41.        (LPSTR)opt_str,80,ini_file);
  42.       my_search_limit.seconds = atoi(opt_str);
  43.       break;
  44.    case 2:
  45.       GetPrivateProfileString(keys[c],"Minutes","60",
  46.        (LPSTR)opt_str,80,ini_file);
  47.       my_search_limit.limit.minutes = atoi(opt_str);            
  48.       break;
  49.    case 3:
  50.       GetPrivateProfileString(keys[c],"Moves","60",
  51.        (LPSTR)opt_str,80,ini_file);
  52.       my_search_limit.limit.moves = atoi(opt_str);            
  53.       GetPrivateProfileString(keys[c],"Minutes","60",
  54.        (LPSTR)opt_str,80,ini_file);
  55.       my_search_limit.limit.minutes = atoi(opt_str);
  56.       break;
  57.    default:
  58.       break;
  59.    }
  60. }
  61.  
  62. void Options::set_src_opts( const Control c,
  63.        const Search_Type my_search_type,
  64.        const Search_Limit &my_search_limit)
  65. {
  66.    char msg[40];
  67.    WritePrivateProfileString(keys[c],"Search Type",src_names[my_search_type],
  68.          ini_file);
  69.    switch (my_search_type)
  70.    {
  71.     case Fixed_Ply:
  72.       wsprintf(msg,"%d",my_search_limit.max_ply);
  73.       WritePrivateProfileString(keys[c],"ply",msg,ini_file);
  74.       break;
  75.    case Time_Limit:
  76.       wsprintf(msg,"%ld",my_search_limit.seconds);
  77.       WritePrivateProfileString(keys[c],"Seconds",msg,ini_file);
  78.       break;
  79.    case Game:
  80.       wsprintf(msg,"%d",my_search_limit.limit.minutes);
  81.       WritePrivateProfileString(keys[c],"Minutes",msg,ini_file);
  82.       break;
  83.    case Tournament:
  84.       wsprintf(msg,"%d", my_search_limit.limit.moves);
  85.       WritePrivateProfileString(keys[c],"Moves",msg,ini_file);
  86.       wsprintf(msg,"%d", my_search_limit.limit.minutes);
  87.       WritePrivateProfileString(keys[c],"Minutes",msg,ini_file);
  88.       break;
  89.    case None:
  90.       WritePrivateProfileString(keys[c],"Search Type","None",
  91.          ini_file);
  92.    }
  93. }
  94. #endif
  95.  
  96. Options::Options()
  97. {
  98.    Search_Limit my_search_limit;
  99.    Search_Type my_search_type;
  100. #ifdef WINDOWS
  101.    char opt_str[80];
  102.    get_src_opts(First, my_search_type, my_search_limit);
  103.    tc[0] = Time_Control(my_search_type, my_search_limit);
  104.    get_src_opts(Second, my_search_type, my_search_limit );
  105.    tc[1] = Time_Control(my_search_type, my_search_limit);
  106.    GetPrivateProfileString("Preferences","Beep After Move","True",
  107.       (LPSTR)opt_str,80,ini_file);
  108.    prefs.beep_after_move = (strcmp(opt_str,"True")==0) ;
  109.    GetPrivateProfileString("Preferences","Beep On Error","True",
  110.       (LPSTR)opt_str,80,ini_file);
  111.    prefs.beep_on_error = (strcmp(opt_str,"True")==0) ;
  112.    GetPrivateProfileString("Preferences","Can Resign","True",
  113.       (LPSTR)opt_str,80,ini_file);
  114.    prefs.can_resign = (strcmp(opt_str,"True")==0) ;
  115.    GetPrivateProfileString("Preferences","Use Book","True",
  116.       (LPSTR)opt_str,80,ini_file);
  117.    prefs.use_book = (strcmp(opt_str,"True")==0) ;
  118.    GetPrivateProfileString("Preferences","Think When Idle","True",
  119.       (LPSTR)opt_str,80,ini_file);
  120.    prefs.think_when_idle = (strcmp(opt_str,"True")==0) ;
  121. #else
  122.    // set some default options
  123.    my_search_type = Fixed_Ply;
  124.    my_search_limit.max_ply = 2;
  125.    prefs.beep_after_move = True;
  126.    prefs.beep_on_error = True;
  127.    prefs.can_resign = True;
  128.    prefs.randomize_moves = False;
  129.    prefs.use_book = True;
  130.    prefs.think_when_idle = False;
  131.    tc[0] = Time_Control(Fixed_Ply,my_search_limit);
  132.    tc[1] = Time_Control(None,my_search_limit);
  133. #endif
  134. }
  135.  
  136. Options::~Options()
  137. {
  138.    save();
  139. }
  140.  
  141. void Options::get_preferences( Preferences &p )
  142. {
  143.     p = prefs;
  144. }
  145.  
  146. void Options::update_preferences( const Preferences &p)
  147. {
  148.     prefs = p;
  149. }
  150.  
  151. void Options::save()
  152. {
  153. #ifdef WINDOWS
  154.    set_src_opts(First,tc[0].get_search_type(),
  155.      tc[0].get_search_limit());
  156.    set_src_opts(Second,tc[1].get_search_type(),
  157.      tc[1].get_search_limit());
  158.    static char *boolImage[2] = { "False", "True" };
  159.    WritePrivateProfileString("Preferences","Beep After Move",
  160.       boolImage[(int)beep_after_move()],ini_file);
  161.    WritePrivateProfileString("Preferences","Beep On Error",
  162.       boolImage[(int)beep_on_error()],ini_file);
  163.    WritePrivateProfileString("Preferences","Can Resign",
  164.       boolImage[(int)can_resign()],ini_file);
  165.    WritePrivateProfileString("Preferences","Use Book",
  166.       boolImage[(int)use_book()],ini_file);
  167.    WritePrivateProfileString("Preferences","Think When Idle",
  168.       boolImage[(int)think_when_idle()],ini_file);
  169. #endif
  170. }
  171.